#include "is_item_available.h"

IsItemAvailable::IsItemAvailable(const std::string& name, const BT::NodeConfig& config,
                                 rclcpp::Node* node)
    : BT::ConditionNode(name, config), node_(node)
{
}

BT::PortsList IsItemAvailable::providedPorts() { return {BT::InputPort<int>("item_id", "物品ID")}; }

BT::NodeStatus IsItemAvailable::tick()
{
    auto itme_id_res = getInput<int>("item_id");
    if (!itme_id_res)
    {
        // 错误信息会明确提示映射问题，方便定位
        RCLCPP_ERROR(node_->get_logger(), "获取货架ID失败：%s", itme_id_res.error().c_str());
        return BT::NodeStatus::FAILURE;
    }
    int item_id = itme_id_res.value();

    RCLCPP_INFO(node_->get_logger(), "准备检查物品 %d", item_id);

    // 模拟物品可用性检查（随机结果）
    bool available = (rand() % 100) > 30;  // 70%概率可用

    RCLCPP_INFO(node_->get_logger(), "检查物品的结果: %d", available);

    return available ? BT::NodeStatus::SUCCESS : BT::NodeStatus::FAILURE;
}